package com.zhongge.stackOJ;

import java.util.Stack;

/**
 * @ClassName ParenthesisMatching
 * @Description TODO 括号匹配
 * @Author 笨忠
 * @Date 2025/8/23 15:44
 * @Version 1.0
 */
@SuppressWarnings("all")
public class ParenthesisMatching {
    public boolean isValid(String s) {
        //第一步：需要辅助栈
        Stack<Character> stack = new Stack<>();

        //第二步：遍历字符串将左括号入栈
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            //如果是左括号==》入栈
            if (ch == '(' || ch == '[' || ch == '{') {
                stack.push(ch);
            } else {//如果是右括号==》瞄一眼栈顶元素与i处值比较
                //取出栈顶元素前 看栈是否为空
                if (stack.isEmpty()) {
                    return false;//栈为空属于 栈空字符串不空情况
                }
                char ch2 = stack.peek();//取出栈顶元素
                // 程序到这里此时ch2是左括号 而ch是右括号
                if (ch2 == '(' && ch == ')' || ch2 == '[' && ch == ']'
                || ch2 == '{' && ch == '}') {//匹配就出栈
                    //出栈
                    stack.pop();
                } else {
                    //不匹配 就 false
                    return false;
                }
            }
        }
        //程序走到这==》就是字符串为空
        //此时两种情况==》栈空 和  和栈不空
        if (!stack.isEmpty()) {//字符串空但栈不空
            return false;
        }
        //走到这==》就是栈空字符串也空
        return true;
    }

}
